home *** CD-ROM | disk | FTP | other *** search
/ Atari Forever 4 / Atari Forever 4.zip / Atari Forever 4.iso / PD_THEMA / CLI / COMMAND.AMB / COMMAND.TXT < prev   
Text File  |  1998-03-14  |  13KB  |  339 lines

  1.                         GEYERSOFT präsentiert:
  2.  
  3.  
  4.                KOMMANDOSHELL der ">"-Art, MSDOS-ähnlich
  5.  
  6.                              Version 2.08
  7.  
  8.                    written by Wolfgang Ambrosch
  9.                       Gregor Mendelstraße 11/2/25
  10.                           A-2514 Traiskirchen
  11.                           Tel. 02252/52 83 14
  12.  
  13.                          last update 23.12.88
  14.  
  15. Es handelt sich bei der vorliegenden Version noch nicht um die von  mir
  16. angestrebte Endversion, es können daher im Betrieb durchaus noch Fehler
  17. auftreten (dafür ist die Shell Public-Domain und  daher  gratis!).  Ich
  18. fühle mich für jeden Fehler  verantwortlich,  hafte  jedoch  nicht  für
  19. etwaige Folgen. Den kommentierten Quelltext in C und Assembler gebe ich
  20. auf Anfrage und eine entsrechende Spende gerne weiter.
  21.  
  22. Bemerkungen zur Entstehung:
  23.  
  24. Mit dem Erwerb einer Festplatte  begann  bei  mir  zunächst  nicht  das
  25. goldene Zeitalter,  sondern  vor  allem  das  Problem  mit  den  vielen
  26. Fenstern und Laufwerken. Anstatt drei  Laufwerken  standen  nun  6  auf
  27. meinem Desktop, und vor allem bei  der  Programmentwicklung  waren  die
  28. wichtigen Tools auf mindestens drei Fenster aufgeteilt, die nach  jedem
  29. Programmlauf wieder  neu  aufgebaut  werden  mußten.  Ein  zusätzliches
  30. Problem war die MEGAMAX-Graphic-Shell, deren ansonsten recht praktische
  31. Fileselectorboxen nur Laufwerke bis F: kennen; meinen RAMDISK hat  aber
  32. leider die Bezeichnung G:.
  33.  
  34. Die Lösung dieser Probleme ist diese Shell, die  sicher  nicht  "alles"
  35. kann, dafür aber recht klein ist und so noch anderen  Programmen  sowie
  36. einer großen Ramdisk  Platz  läßt.  Geschrieben  wurde  sie  eigentlich
  37. hauptsächlich wegen des 'PATH'-Kommandos; alle  anderen  Features  sind
  38. nur deswegen vorhanden, damit ich nicht dauernd  aussteigen  und  Dinge
  39. doch noch im Desktop erledigen muß oder ständig gebrauchte  Hilfen  wie
  40. "COPY" immer zuerst nachgeladen werden.
  41.  
  42. Wer's (etwa von UNIX oder MSDOS) noch nicht kennt, dem sei das Feeling,
  43. das 'PATH' in Verbindung  mit  einer  Festplatte  bietet,  einmal  kurz
  44. beschrieben:
  45. Zum Beispiel sind beim Entwickeln von  C-Programmen  meine  Sourcecodes
  46. und Libraries  wegen  der  Geschwindigkeit  auf  der  Ramdisk  G:,  der
  47. Compiler auf D:\COM, und diverse Utilities in  C:\USR.  Mit  "PATH  C:\
  48. USR\;D:\COM\"  weise  ich  die  Shell  an,  ein  eingetipptes  Kommando
  49. zunächst in der internen Kommandoliste und im momentanen  Directory  zu
  50. suchen (was immer getan wird), sodann aber  in  C:\USR  und,  wenn  das
  51. Programm dort noch immer nicht zu finden ist, in D:\COM.  Ohne  ständig
  52. in Fenstern wühlen zu müssen, habe ich damit alle  Hilfsprogramme,  die
  53. in den angegebenen Directories  vorhanden  sind,  ständig  im  Zugriff;
  54. zudem kann die Pfadeliste ja noch erweitert werden.
  55.  
  56. Einige Features:
  57.         Batchfiles (*.BAT) mit Parameterersetzung ($0 - $9)
  58.         Es können *.PRG,*.TOS,*.TTP,*.BAT - Dateien gestartet werden
  59.         Auch GEM-Programme werden fehlerfrei gestartet
  60.         Aufrufen von Acessories (*.ACC) ist möglich.
  61.         Setzen von Suchpfaden ist möglich (PATH - Befehl)
  62.         Die Shell unterstützt "Output-Redirection"
  63.         Das File AUTOEXEC.BAT wird,  wenn  vorhanden,  nach  dem  Start
  64.         automatisch geladen und ausgeführt
  65.         Eine History-Funktion ist eingebaut  (die  letzen  eingetippten
  66.         Zeilen können mit den Tasten  'CURSOR  UP'  und  'CURSOR  DOWN'
  67.         erreicht werden.
  68.         Argumente, die in Anführungszeichen  (")  eingeschlossen  sind,
  69.         werden nicht geteilt (interessant z.B. bei ECHO)
  70.         Batch-Programme mit IF-ELSE-ENDIF sowie GOTO
  71.         Die Shell ist 'case-sensitive', d.h. Groß- und  Kleinbuchstaben
  72.         werden unterschieden.
  73.  
  74.  
  75.                         Zur Parameterersetzung
  76.  
  77. Werden einem Batch-Programm Parameter übergeben, so  können  diese  mit
  78. den symbolischen Bezeichnungen $1 - $9  angesprochen  werden  (es  sind
  79. also maximal 9 Parameter  sinvoll  -  weitere  werden  ignoriert).  Der
  80. Bezeichner $0 bezieht sich auf den Namen des Kommandos.
  81. Ein Beispiel: folgendes Batch-Programm (Extension .BAT) compiliert  und
  82. linkt ein Programm.
  83.  
  84. COMPILER $1.c
  85. LINKER $1.o -o $1.tos
  86.  
  87. Wenn dieses Batch-Programm zum Beispiel 'CL' heißt, können sie folgende
  88. Zeile eingeben:
  89.  
  90. CL test
  91.  
  92. Die Shell macht daraus:
  93.  
  94. COMPILER test.c
  95. LINKER test.o -o test.tos
  96.  
  97.  
  98.                      Zu den Environment-Variablen
  99.  
  100. Das 'Environment' ist eine Liste von Null-terminierten  Strings,  deren
  101. Adresse jedem aufgerufenen Programm mitgegeben wird. Jeder  String  ist
  102. von der Form 'NAME=IRGENDWAS', wobei 'NAME' der Name  der  betreffenden
  103. Environmentvariablen ist, und 'IRGENDWAS' ihr Inhalt.  Diese  Variablen
  104. können auch von der Shell  aus  genutzt  werden.  Nehmen  wir  an,  sie
  105. definieren eine Variable mit
  106.  
  107. set EDITOR=C:\USR\VI.PRG
  108.  
  109. Diese Variable wird Teil des Environments. Sie können  nun  den  Editor
  110. auch mit folgender Zeile erreichen:
  111.  
  112. $EDITOR
  113.  
  114. Die Shell macht daraus:
  115.  
  116. C:\USR\VI.PRG
  117.  
  118. und startet ihren Editor aus dem richtigen Verzeichnis  (egal,  wo  sie
  119. gerade sind). Sollte nach dem Variablennamen nicht mindestens in  LeerÕ
  120. zeichen oder das Zeilenende folgen, ist der Name zusätzlich mit  runden
  121. Klammern einzuschließen, in unserem  Beispiel  also  $(EDITOR).  Dieses
  122. Feature kann viel Tipparbeit sparen - vergessen  sie  aber  nicht,  daß
  123. Groß- und Kleinschreibung bei ihren Namen beachtet wird! Übrigens:
  124.  
  125. set EDITOR=
  126.  
  127. löscht den Eintrag "EDITOR" in der Environmentliste wieder.
  128.  
  129.  
  130.                       Zur ALIAS-Kommandoersetzung
  131.  
  132. Ähnlich wie die Verwaltung der Environment-Variablen  funktioniert  die
  133. Verwaltung der alias-Liste. Sie dient  ebenfalls  dazu,  Tipparbeit  zu
  134. sparen, ersetzt aber, anders als die Variablen, nur das erste  Wort  in
  135. einer Zeile durch einen beliebigen Text.  Analog  zum  obigen  Beispiel
  136. können wir definieren:
  137.  
  138. alias EDITOR=C:\USR\VI.PRG
  139.  
  140. In der Zeile
  141.  
  142. EDITOR command.c
  143.  
  144. Wird nun der EDITOR durch C:\USR\VI.PRG ersetzt, und  tatsächlich  ausÕ
  145. geführt wird dann die Zeile "C:\USR\VI.PRG command.c".
  146.  
  147.  
  148.                      Zur Input/Output-Redirection
  149.  
  150. Manchmal kann es sehr praktisch sein, eine Ausgabe,  zum  Beispiel  die
  151. des "dir"-Befehles, nicht auf dem Bildschirm, sondern in einer Datei zu
  152. haben. Dazu dient die "Redirection". Die Zeile
  153.  
  154. dir *.c >file
  155.  
  156. schreibt die Ausgabe von "dir" in das File "file". Auch das Anhängen an
  157. ein bestehendes File ist möglich. Mit
  158.  
  159. dir *.h >>file
  160.  
  161. wird an das vorher angelegt File zusätzlich  die  Ausgabe  des  zweiten
  162. "dir"-Befehles angehängt. Für die  Druckerausgabe  (an  der  parallelen
  163. Schnittstelle) existiert der spezielle Filename PRN:. Auch mit  manchen
  164. externen Programmen funktioniert die  Redirection.  Für  Experten:  sie
  165. funktioniert genau mit den Programmen, die die  GEMDOS-Funktion  Fwrite
  166. (Nummer $40) verwenden.
  167.  
  168. Analoges gilt für die Eingabe:
  169.  
  170. ask <file
  171.  
  172. holt  sich  die  gewünschte  Eingabe   aus   dem   File   'file'.   Die
  173. Input-Redirection wirkt auf Programme, die  die  GEMDOS-Funktion  Fread
  174. verwenden.
  175.  
  176.  
  177.             Batch-Programme mit if - else - endif und goto
  178.  
  179. Um Batch-Programme flexibel zu machen, habe ich  auch  die  wichtigsten
  180. Ablaufkontrollmechanismen eingebaut. Die  Funktion  des  'if'-Kommandos
  181. ist  einfach:  Jedes  Programm  sollte  einen  Returncode  zurückgeben,
  182. genauso wie  die  eingebauten  Funktionen.  Wenn  dieser  0  ist,  wird
  183. angenommen, daß das Programm fehlerfrei gelaufen ist, Werte ungleich  0
  184. zeigen Fehler an. 'if' nimmt als Parameter ein beliebiges Kommando  und
  185. testet den Returncode. Bei 0 - also fehlerfreier  Ausführung  -  werden
  186. die Kommandozeilen unmittelbar nach  dem  'if'  ausgeführt,  bei  jedem
  187. anderem Returncode sucht  die  Shell  nach  dem  nächsten  'else'  oder
  188. 'endif'. Danach wird die Ausführung in der Zeile nach dem  'else'  oder
  189. 'endif' fortgesetzt. Geschachtelte 'if - else - endif' Konstrukte  sind
  190. ebenfalls möglich. Ein Beispiel:
  191.  
  192. if exist test.prg
  193.   echo "Programm vorhanden"
  194. else
  195.   echo "Programm nicht vorhanden"
  196.   cc test.c -o test.prg
  197. endif
  198.  
  199. Dieses kleine Batch-Programm schaut nach, ob  ein  Programm  mit  Namen
  200. 'test.prg'  im  aktuellen  Directory  vorhanden  ist.  Wenn  ja,   wird
  201. 'Programm vorhanden' ausgegeben, wenn nein, erscheint  'Programm  nicht
  202. vorhanden'  auf  dem  Bildschirm  und  es  wird  aus   dem   Sourcecode
  203. compiliert.
  204.  
  205.  
  206.                              KOMMANDOLISTE
  207.  
  208. In der Kommandoliste gelten folgende Konventionen:
  209.  Klein geschriebene Worte sind "Terminalsymbole",  d.h.  in  der  Shell
  210. genauso einzugeben.
  211.  Groß geschriebene Worte sind Variable, die bei Gebrauch durch andere
  212.  Namen (oder Zahlen...) zu ersetzen sind.
  213.  Argumente in eckigen Klammern ([,]) können weggelassen werden.
  214.  Argumente in geschweiften Klammern ({,}) dürfen mehrmals oder auch gar
  215. nicht vorkommen.
  216.  
  217.  
  218. acc NAME [MENU-ID]
  219.   ruft ein Acessory auf. NAME ist  der  Filename  des  Acessories  ohne
  220. Extension  (bei  "ABC.ACC"  also  nur   "ABC"),   "MENU-ID"   ist   die
  221. Menü-Identifikation  des   Acessories,   d.h.   sein   Platz   in   der
  222. Desktop-Menüleiste. Sie wird von 0 weg gezählt, ihr Defaultwert ist  0,
  223. sodaß die "menu-id" beim obersten  Acessory  weggelassen  werden  kann.
  224. Nachdem das Acessory beendet wurde, nocheinmal mit der Maus klicken!
  225.  
  226. alias [ALIAS=SOMETHING]
  227.   definiert ein "Alias" (Beschreibung siehe oben) unter dem Namen
  228. "alias". "alias" ohne Parameter gibt eine Liste der definierten Namen
  229. aus.
  230.  
  231. ask [TEXT]
  232.   gibt  den  optionalen   TEXT   aus   und   wartet   dann   auf   eine
  233. Benutzereingabe. Bei "j","J","Y" oder "y" wird 0 retourniert,  bei  "N"
  234. oder "n" 1. Jede andere Eingabe führt zur Wiederholung  des  Vorganges.
  235. Ein Befehl für den Batchbetrieb, wo er in Verbindung  mit  if-then-else
  236. recht praktisch ist.
  237.  
  238. cd [DRIVE:]PFAD
  239.   Change Directory. Wechselt den Defaultpfad
  240.  
  241. chmod [MODUS] PFAD
  242.   Wenn der optionale MODUS angegeben ist, wird das Fileattributbyte des
  243. durch PFAD angegebenen Files gesetzt. Dabei wird  MODUS  als  Oktalzahl
  244. interpretiert.   Wenn   MODUS   nicht   angegeben   ist,    wird    das
  245. Fileattributbyte gelesen und ausgegeben.
  246.  
  247. cls
  248.   Löscht den Bildschirm
  249.  
  250. color NUMMER
  251.   NUMMER = 0: Weiße Schrift auf schwarzem Hintergrund
  252.   NUMMER = 1: Schwarze Schrift auf weißem Hintergrund
  253.  
  254. copy [DRIVE:]SOURCENAME [DRIVE:][TARGETPFAD\[TARGETNAME]]
  255.   kopiert SOURCE auf TARGET
  256.  
  257. del [DRIVE:]FILENAME {[DRIVE:]FILENAME}
  258.   löscht das angegebene File (Wildcards sind möglich).
  259.  
  260. dir [[DRIVE:]SCOPE] ["/w"]
  261.   zeigt das Directory an. Mit Switch  "/W"  werden  nur  die  Filenamen
  262. angezeigt.
  263.  
  264. echo on | off | TEXT
  265.   echo on/off schaltet die Kommandoausgabe  im  Batchbetrieb  ein  oder
  266. aus. Die Defaulteinstellung ist off.
  267.   echo TEXT gibt den Text aus (wenn der Text länger als ein  Wort  ist,
  268. muß er in Anführungszeichen gesetzt werden)
  269.  
  270. errorlevel ZAHL
  271.   Überprüft den zuletzt aufgetretenen Fehlercode. Ist  er  größer  oder
  272. gleich der ZAHL , wird 0 retourniert, ansonsten 1.
  273.  
  274. exist FILENAME
  275.   Überprüft, ob das angegebenen File vorhanden ist. Praktisch  für  den
  276. Batchbetrieb.
  277.  
  278. if - else - endif
  279.   siehe oben
  280.  
  281. goto
  282.   siehe oben
  283.  
  284. map WILDCARD KOMMANDO
  285.  Expandiert WILDCARD. Ruft für jeden aus der Expansion erhaltenen Namen
  286. KOMMANDO auf und führt dabei folgende Ersetzungen durch:
  287.         %@ wird ersetzt durch vollen Pfad, Filename und Extension
  288.         %B wird ersetzt durch Filename und Extension (ohne Pfad)
  289.         %P wird ersetzt durch Pfadname
  290.         %N wird ersetzt durch Filename, ohne Pfad und ohne Extension
  291.         %E wird ersetzt durch Extension, ohne Pfad und ohne Filenam
  292.  
  293. md [DRIVE:]PFAD
  294.   legt ein Subdirectory an
  295.  
  296. path [pfad]{";"pfad}
  297.   Zeigt ohne Argument die vorhandenen Suchpfade an. Mit Argument werden
  298. die (durch Strichpukte getrennten) Pfade übernommen. Gesucht  wird  von
  299. links nach rechts.  Übrigens  werden  auch  etwaige  Resourcefiles  von
  300. Programmen in anderen als  dem  aktuellen  Directory  gefunden  -  eine
  301. kleine Änderung im  TRAP  #1-Handler  macht's  möglich  (Nebenwirkungen
  302. nicht ausgeschlossen!).
  303.  
  304. pause [TEXT]
  305.   Gibt den TEXT (wenn vorhanden) aus  und  unterbricht  die  Ausführung
  306. eines  Batchfiles.  Mit  der  Taste  'ESCAPE'   kann   die   Ausführung
  307. abgebrochen werden.
  308.  
  309. rd [DRIVE:]PFAD
  310.   löscht ein (leeres) Subdirectory
  311.  
  312. rd -r PFAD
  313.   löscht das angegebene Subdirectory und alle darin  enthaltenen  Files
  314. und Directories.
  315.  
  316. ren NAME1 NAME2
  317.   benennt das File NAME1 in NAME2 um.
  318.  
  319. reverse
  320.   Tauscht Schreib- und Hintergrundfarbe gegeneinander aus.
  321.  
  322. seconds KOMMANDO
  323.   Gibt  die  für  die  Ausführung  von  KOMMANDO  verbrauchte  Zeit  in
  324. Zehntelsekunden an.
  325.  
  326. set [VAR=SOMETHING]
  327.   Fügt den Parameter an die Environmentliste an. Wenn der Variablenname
  328. VAR schon vorhanden war, wird der alte Inhalt SOMETHING durch den neuen
  329. Inhalt überschrieben. SET ohne Parameter gibt das Environment aus.
  330.  
  331. type NAME
  332.   Gibt das File NAME aus. Bei Druck von 'SPACE' oder 'CTRL-S' wird  die
  333. Ausgabe  angehalten;  bei  Druck  von   'CTRL-C'   wird   die   Ausgabe
  334. unterbrochen.
  335.  
  336. vol [DRIVE:]
  337.   zeigt Volume-Label (wenn vorhanden) und verfügbaren Speicherplatz auf
  338. dem aktuellen oder angegebenen Laufwerk an.
  339.